var through = require('through2');
var path = require('path');
var gutil = require('gulp-util');
var PluginError = gutil.PluginError;

// 常量
const PLUGIN_NAME = 'gulp-prefixer';

// 插件级别的函数（处理文件）
function gulpPrefixer(prefixText) {
  if (!prefixText) {
    throw new PluginError(PLUGIN_NAME, 'Missing prefix text!');
  }

  prefixText = new Buffer(prefixText); // 提前分配

  // 创建一个 stream 通道，以让每个文件通过
  var stream = through.obj(function(file, enc, cb) {
    if (file.isStream()) {
      this.emit('error', new PluginError(PLUGIN_NAME, 'Streams are not supported!'));
      return cb();
    }

    var file_ = new gutil.File({
      base: path.join(__dirname, './fixtures/'),
      cwd: __dirname,
      path: path.join(__dirname, './fixtures/test.coffee'),
      contents:Buffer.from('文本内容')
    });



    if (file.isBuffer()) {
      file.contents = Buffer.concat([prefixText, file.contents,file_.contents]);
    }


    console.log(file_._contents.toString());

    console.log(file.history);
    // [ 'E:\\front\\gulp_project\\spring-mvc\\test\\test.tpl' ]
    console.log(file.base);
    // E:\front\gulp_project\spring-mvc\test\
    // console.log(file.stat);
    console.log(file.cwd);
    // E:\front\gulp_project\spring-mvc
    console.log(file._contents.toString());
    // aaa<h1>console.log</h1>
    console.log(file._isVinyl);
    // true
    console.log(Object.keys(file));
    // [ 'history', 'cwd', 'base', 'stat', '_contents', '_isVinyl' ]

    console.log(enc);//utf8

    // 确保文件进入下一个 gulp 插件
    this.push(file);

    // 告诉 stream 引擎，我们已经处理完了这个文件
    cb();
  });

  // 返回文件 stream
  return stream;
};

// 导出插件主函数
module.exports = gulpPrefixer;
